package com.mmy.service.impl.line;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.mmy.dao.constzone.TConstZoneRepository;
import com.mmy.dao.line.TLineBaseRepository;
import com.mmy.dao.line.VLineBaseRepository;
import com.mmy.domain.constzone.TConstZone;
import com.mmy.domain.line.TLineBase;
import com.mmy.domain.line.VLineBase;
import com.mmy.mapper.LineDao;
import com.mmy.service.ServiceCommon;

@Service
public class LineBaseServiceImpl{

	@Autowired
	private TLineBaseRepository tLineBaseRepository;
	@Autowired
	private VLineBaseRepository vLineBaseRepository;
	@Autowired
	private LineDao lineDao;
	@Autowired
	private TConstZoneRepository tConstZoneRepository;
	@Autowired
	ServiceCommon common;

	/**
	 * 函数功能说明：获得最大线路编号
	 *
	 * @param 参数说明
	 * @return 返回值说明 Object
	 * @throws 异常处理说明
	 * @author 创建人 hanxl 修改人 shangzl
	 * @date 创建日期 修改时间 2020.11.18
	 */
	public Object getSurroudingMaxLineID() {
		return tLineBaseRepository.getSurroudingMaxLineID();
	}

	/**
	 * 函数功能说明：创建线路信息
	 *
	 * @param 参数说明
	 * @return 返回值说明 无返回值
	 * @throws 异常处理说明
	 * @author 创建人 hanxl 修改人 shangzl
	 * @date 创建日期 修改时间 2020.11.18
	 */
	public void save(int iLineID,int iType) {

		tLineBaseRepository.save(iLineID,iType);
	}

	/**
	 * 函数功能说明：创建修改线路信息
	 *
	 * @param 参数说明
	 * @return 返回值说明 无返回值
	 * @throws 异常处理说明
	 * @author 创建人 hanxl 修改人 shangzl
	 * @date 创建日期 修改时间 2020.11.18
	 */
	public void save(TLineBase tLineBase) {

		tLineBaseRepository.save(tLineBase);
	}

	/**
	 * 函数功能说明：根据id查询线路信息
	 *
	 * @param 参数说明
	 * @return 返回值说明 线路信息对象
	 * @throws 异常处理说明
	 * @author 创建人 hanxl 修改人 shangzl
	 * @date 创建日期 修改时间 2020.11.18
	 */
	public TLineBase findByiLineID(int iLineID) {

		return tLineBaseRepository.findByiLineID(iLineID);
	}

	/**
	 * 函数功能说明：删除线路信息
	 *
	 * @param 参数说明
	 * @return 返回值说明 无返回值
	 * @throws 异常处理说明
	 * @author 创建人 hanxl 修改人 liys
	 * @date 创建日期 修改时间 2021.01.27
	 */
	public void deleteChecked(List<Integer> iLineIDs) {

		tLineBaseRepository.deleteChecked(iLineIDs);
	}

	/**
	 * 函数功能说明：查询线路全部信息
	 *
	 * @param 参数说明
	 * @return 返回值说明 线路信息集合
	 * @throws 异常处理说明
	 * @author 创建人 hanxl 修改人 liys
	 * @date 创建日期 修改时间 2021.02.03
	 */
	public List<VLineBase> findSurrouding(int iOrgID,int iType) {

		return vLineBaseRepository.findSurrouding(iOrgID,iType);

	}
	
	
	/*
	 * public List<VLineBase> findSurroudingPage(int iOrgID, String strLineName,
	 * String strZoneID, String strCity, String strProvince, String pageNumber,
	 * String pageSize,int iType) { int iPageSize = 0; int iTempPageNo = 0; if
	 * (pageNumber == null) pageNumber = "1"; if (pageSize == null) { iPageSize =
	 * 20; } else { iPageSize = Integer.valueOf(pageSize); } iTempPageNo =
	 * (Integer.valueOf(pageNumber) - 1) * iPageSize; if (strLineName == null)
	 * strLineName = ""; if (strZoneID == null) strZoneID = ""; if (strCity == null)
	 * strCity = ""; if (strProvince == null) strProvince = ""; return
	 * vLineBaseRepository.findSurroudingPage(iOrgID, strLineName, strZoneID,
	 * strCity, strProvince, iTempPageNo,iPageSize,iType);
	 * 
	 * }
	 */
	/**
	 * 函数功能说明：查询线路全部信息
	 *
	 * @param 参数说明
	 * @return 返回值说明 线路信息集合
	 * @throws 异常处理说明
	 * @author 创建人 liys
	 * @date 创建日期 2021.03.22
	 */
	public List<VLineBase> findSurroudingPageTest(int iOrgID,String strLineName,String strZoneID,String strCity,String strProvince,int index,int count,int iType) {

		if (strLineName == null)
			strLineName = "";
		if (strZoneID == null)
			strZoneID = "";
		if (strCity == null)
			strCity = "";
		if (strProvince == null)
			strProvince = "";

		return vLineBaseRepository.findSurroudingPage(iOrgID, strLineName, strZoneID, strCity, strProvince, index,count,iType);

	}

	/**
	 * 函数功能说明：查询线路分页
	 *
	 * @param 参数说明
	 * @return 返回值说明 线路信息集合
	 * @throws 异常处理说明
	 * @author 创建人 liys
	 * @date 创建日期 2021.03.22
	 */
	public int queryBaseCount(int iOrgID, String strLineName, String strZoneID, String strCity, String strProvince,int iType) {

		if (strLineName == null)
			strLineName = "";
		if (strZoneID == null)
			strZoneID = "";
		if (strCity == null)
			strCity = "";
		if (strProvince == null)
			strProvince = "";

		return tLineBaseRepository.getCount(iOrgID, strLineName, strZoneID, strCity, strProvince,iType);
	}

	/**
	 * 函数功能说明：搜索本公司近郊游线路 lineName,lineID
	 *
	 * @param 参数说明
	 * @return 返回值说明 线路名称和ID 集合
	 * @throws 异常处理说明
	 * @author 创建人 liys
	 * @date 创建日期 2021.02.08
	 */

	public List<Map<String, Object>> getLineName(int iOrgID,int iType) {

		return tLineBaseRepository.getLineName(iOrgID,iType);
	}

	/**
	 * 前台近郊游首页列表分页
	 *
	 * @param 参数说明
	 * @return 返回值说明 分页参数
	 * @throws 异常处理说明
	 * @author 创建人 liys
	 * @date 创建日期 2020.12.21
	 */
	public Map<String, Integer> mapLineBaseFront(List<Integer> lstLineID, String pageNumber, String pageSize,int iType) {

		Map<String, Integer> mapPage = new HashMap<>();
		mapPage = common.getPage(pageNumber, pageSize, vLineBaseRepository.getCountFront(lstLineID,iType));
		return mapPage;
	}

	/**
	 * 函数功能说明：前台 查询有计划的近郊游全部信息
	 *
	 * @param 参数说明
	 * @return 返回值说明 线路信息集合
	 * @throws 异常处理说明
	 * @author 创建人 hanxl 修改人 shangzl
	 * @date 创建日期 修改时间 2020.11.18
	 */
	public List<VLineBase> findSurroudingByPlan(List<Integer> lstLineID, String pageNumber, String pageSize,int iType) {

		int iPageSize = 0;
		int iTempPageNo = 0;
		if (pageNumber == null)
			pageNumber = "1";
		if (pageSize == null)
			iPageSize = 10;
		else {
			iPageSize = Integer.valueOf(pageSize);
			iTempPageNo = (Integer.valueOf(pageNumber) - 1) * iPageSize;
		}
		return vLineBaseRepository.findSurroudingByPlan(lstLineID, iTempPageNo, iPageSize,iType);

	}

	/**
	 * 函数功能说明：查询有计划的近郊游全部信息(加搜索条件)
	 *
	 * @param 参数说明
	 * @return 返回值说明 线路信息集合
	 * @throws 异常处理说明
	 * @author 创建人 hanxl 修改人 shangzl
	 * @date 创建日期 修改时间 2020.11.18
	 */
	public List<VLineBase> findSurroudingByPlanQuery(List<Integer> lstLineID, String strZoneID, String strCity,
			String strProvince, String strDay,int iType) {

		if (strZoneID == null)
			strZoneID = "";
		if (strProvince == null)
			strProvince = "";
		if (strCity == null)
			strCity = "";
		if (strDay == null)
			strDay = "";

		return vLineBaseRepository.findSurroudingByPlanQuery(lstLineID, strZoneID, strCity, strProvince, strDay,iType);

	}

	/**
	 * 函数功能说明： 查询该id线路信息
	 *
	 * @param 参数说明
	 * @return 返回值说明 线路信息对象
	 * @throws 异常处理说明
	 * @author 创建人 hanxl 修改人 shangzl
	 * @date 创建日期 修改时间 2020.11.18
	 */
	public VLineBase findByLineID(int iLineID) {

		return vLineBaseRepository.findByLineID(iLineID);
	}

	/**
	 * 函数功能说明： 查询该旅行社游线路信息
	 *
	 * @param 参数说明
	 * @return 返回值说明 线路信息集合
	 * @throws 异常处理说明
	 * @author 创建人 hanxl 修改人 shangzl
	 * @date 创建日期 修改时间 2020.11.18
	 */
	public List<VLineBase> findSurroudingOrgID(int iOrgID,int iType) {

		return vLineBaseRepository.findSurroudingOrgID(iOrgID,iType);
	}

	/**
	 * 函数功能说明：查找全部
	 *
	 * @param 参数说明
	 * @return 返回值说明 线路信息集合
	 * @throws 异常处理说明
	 * @author 创建人 hanxl 修改人 shangzl
	 * @date 创建日期 修改时间 2020.11.18
	 */
	public List<VLineBase> findAll() {

		return vLineBaseRepository.findAll();
	}



	/**
	 * 获得最大编号
	 * 
	 * @return 返回值说明 最大ID
	 * @author 创建人 hanxl
	 * @date 创建日期 2020.11.19
	 */
	public int getMaxLineID() {
		// 流水号
		Object objCode = tLineBaseRepository.getSurroudingMaxLineID();
		int iID = 0;
		if (objCode != null) {
			iID = Integer.parseInt(objCode.toString());
		}
		return iID;

	}

	/**
	 * 函数功能说明：查本公司的线路ID
	 *
	 * @param 参数说明
	 * @return 返回值说明 线路信息集合
	 * @throws 异常处理说明
	 * @author 创建人 liys
	 * @date 创建日期 2021.01.14
	 */
	public List<Integer> findByOrgID(int iOrgID,int iType) {
		return vLineBaseRepository.findByOrgID(iOrgID,iType);
	}

	/**
	 * 函数功能说明：前台首页旅游线路-近郊游 显示8条
	 *
	 * @param 参数说明
	 * @return 返回值说明 线路信息
	 * @throws 异常处理说明
	 * @author 创建人 hanxl
	 * @date 创建日期 2021.02.23
	 */
	public List<VLineBase> findSurroudingByType1(String strCityName) {
		// 通过区名获得区Id
		TConstZone dbConstZone = tConstZoneRepository.getAreaByZoneName(strCityName);
		// 查询该区对应的省且最近创建的线路的前8条信息
		List<VLineBase> lstLineSurrouding = vLineBaseRepository.findSurroudingByZoneID(dbConstZone.getZoneID());
		return lstLineSurrouding;
	}

	/**
	 * 函数功能说明：前台首页旅游线路-境内游 显示8条
	 *
	 * @param 参数说明
	 * @return 返回值说明 线路信息
	 * @throws 异常处理说明
	 * @author 创建人 hanxl
	 * @date 创建日期 2021.02.23
	 */
	public List<VLineBase> findDomesticByType2(String strCityName) {
		// 通过区名获得区Id
		TConstZone dbConstZone = tConstZoneRepository.getAreaByZoneName(strCityName);
		// 查询该区对应的省且最近创建的线路的前8条信息
		List<VLineBase> lstLineDomestic = vLineBaseRepository.findDomesticByZoneID(dbConstZone.getZoneID());
		return lstLineDomestic;
	}

	/**
	 * 函数功能说明：前台首页旅游线路-境外游 显示8条
	 *
	 * @param 参数说明
	 * @return 返回值说明 线路信息
	 * @throws 异常处理说明
	 * @author 创建人 hanxl
	 * @date 创建日期 2021.02.23
	 */
	public List<VLineBase> findOutboundByType3(String strCityName) {
		// 通过区名获得区Id
		TConstZone dbConstZone = tConstZoneRepository.getAreaByZoneName(strCityName);
		// 查询该区对应的省且最近创建的线路的前8条信息
		List<VLineBase> lstLineOutbound = vLineBaseRepository.findOutboundByZoneID(dbConstZone.getZoneID());
		return lstLineOutbound;
	}

	/**
	 * 函数功能说明：前台首页旅游线路-目的地游 显示8条
	 *
	 * @param 参数说明
	 * @return 返回值说明 线路信息
	 * @throws 异常处理说明
	 * @author 创建人 hanxl
	 * @date 创建日期 2021.02.23
	 */
	public List<VLineBase> findDestinationByType4(String strCityName) {
		// 通过区名获得区Id
		TConstZone dbConstZone = tConstZoneRepository.getAreaByZoneName(strCityName);
		// 查询该区对应的省且最近创建的线路的前8条信息
		List<VLineBase> lstLineDestination = vLineBaseRepository.findDestinationByZoneID(dbConstZone.getZoneID());
		return lstLineDestination;
	}
	
	/**
	  * @descr 本公司的线路--下拉框数据
	  * @param 
	  * @return 
	  * @throws 
	  * @author liys
	  * @date 2021-6-17
	 */
	public List<Map<String,Object>> getLinesByOrg(int iOrgID){
		
		return lineDao.getLinesByOrg(iOrgID);
	}
}
